package org.example.autowork;

import lombok.extern.slf4j.Slf4j;
import org.example.api.ChatGptCnn;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 15784
 */
@Slf4j
public class CookieStorageExample {
    private static WebDriver driver;

    //个人简历简单版的
    public static final String JLI = "1.有三年的 J2EE 项目开发经验，熟悉项目开发的整体流程，能根据业务需求调整数据模型，设计程序相\n" + "关接⼝，实现接⼝业务逻辑，编写接⼝文档。\n" + "2.熟悉掌握 Java 面向对象编程思想、反射、多线程等常见设计模式（单例，策略者，桥接，适配器）。\n" + "3.熟悉主流开源框架 SpringMVC,Springboot,mybatis-plus,sa-token,pring,myabtis。\n" + "4.熟悉基于 SpringBoot/SpringCloud 框架项目开发流程，有一定的分布式项目开发经验。\n" + "5.熟练使用 mysql(索引使用规则,事务,锁)，具有一定的 sql 优化经验。\n" + "6.熟练使用 redis、rabbitmq 等中间件。了解 Redis 分布式锁。\n" + "7.了解 html、css、js、vue。了解使用 nginx，熟悉常用 liunx 命令并有项目部署经验。\n" + "8. 对后端技术有持续的热情，善于优化项目，乐此不疲的优化程序性能，也有自己的开源项目 sa-token\n" + "官网可见[ QuickBuild ] https://sa-token.cc/doc.html#/more/link";

    private static final String COMM_URL = "https://www.zhipin.com/web/geek/job-recommend";
    //账号的cookie  自己抓取  key为：wt2
    private static final Cookie COOKIE = new Cookie("wt2", "DOYK1gpydTdpt5XFbwzDH4RbCN1p2TtULeGMqmDldv7itbqG_9N8XSIWPbp3CM1S6KQ6K2wdEs_g6NH5mdhojug~~");

    public static void main(String[] args) {
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        try {
            driver.get(COMM_URL);
            sleep();
            driver.manage().addCookie(COOKIE);
            sleep();
            driver.get(COMM_URL);
            sleep();
            int index = 1;
            while (true) {
                try {
                    getJobDescriptionByIndex(index);
                } catch (Exception e) {
                    log.info("已经沟通过直接跳过....");
                    driver.findElement(By.xpath("/html/body/div[8]/div[2]/div[1]/span/i")).click();
                }
                index += 1;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            // 关闭浏览器
            driver.quit();
        }

    }


    private static void sleep() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    private static void sleep(Long timeout) {
        try {
            Thread.sleep(timeout);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    private static void getJobDescriptionByIndex(Integer index) {
        String jobSelector = "//*[@id='wrap']/div[2]/div[2]/div/div/div[1]/ul/li[" + index + "]";
        WebElement element = driver.findElement(By.xpath(jobSelector));
        // 点击招聘信息列表中的项
        element.click();
        sleep(1000L);
        // 找到描述信息节点并获取文字
        String descriptionSelector = "//*[@id='wrap']/div[2]/div[2]/div/div/div[2]/div/div[2]/p";

        WebElement element1 = driver.findElement(By.xpath(descriptionSelector));
        String text = element1.getText();
        String chatted = chat(text);

        // 点击沟通按钮
        WebElement contactButton = driver.findElement(By.xpath("//*[@id='wrap']/div[2]/div[2]/div/div/div[2]/div/div[1]/div[2]/a[2]"));
        contactButton.click();
        sleep(2000L);
        sendResponseToChatBox(chatted);
    }

    public static void sendResponseToChatBox(String msg) {
        WebElement element = null;
        try {
            element = driver.findElement(By.xpath("//*[@id='chat-input']"));
        } catch (Exception e) {
            driver.findElement(By.xpath("/html/body/div[9]/div[2]/div[3]/a[2]")).click();
            sleep();
            return;
        }
        element.clear();
        element.sendKeys(msg);
        sleep(1000L);
        element.sendKeys(Keys.RETURN);
        sleep(2000L);
        driver.navigate().back();
        sleep(2000L);
    }

    private static String chat(String jobDescription) {
        String askMessage = "你好，这是我的简历：" + JLI + "，这是我所应聘公司的要求：" + jobDescription + "。我希望您能帮我直接给HR写一个礼貌专业的求职新消息，要求能够用专业的语言将简历中的技能结合应聘工作的描述，来阐述自己的优势，尽最大可能打动招聘者。并且请您始终使用中文来进行消息的编写,开头是招聘负责人。这是一封完整的求职信，不要包含求职信内容以外的东西，不要结束语，例如“根据您上传的求职要求和个人简历，我来帮您起草一封求职邮件：”这一类的内容，以便于我直接自动化复制粘贴发送，字数控制在80字左右为宜";
        ChatGptCnn chatGptCnn = new ChatGptCnn();
        chatGptCnn.setPrompt(askMessage);
        String call = null;
        try {
            call = chatGptCnn.call();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        log.info(call);
        return call;
    }
}
